In a client-server computer system, clients rely on servers to provide needed services. In the simplest form of these systems, a single server serves multiple clients. If this is the case, then any degradation in the quality of service (QOS) provided by the server, or failure of the server, will result in poor or failed service at each of its clients.
In many cases, however, this single point of failure is unacceptable. Therefore, systems are often built such that multiple servers are available to service clients, and clients are able to failover from one server to another. For example, if a client detects that a server fails to respond, then the client can switch to, or failover to, another server providing the same service.
Detecting the need for failover is usually governed by a timeout mechanism configured on the client. Typically, given a particular request, the client will wait for time T for a response from the server and will retry the request R times, again waiting time T for each retry. In a situation where the server can not respond in time T to the request, either because the server is down (has failed), or the QOS has degraded, then the client waits for a total time of R*T without a response to the request and then fails over to another server.
A problem with such a system is that the client wastes the total time to failover of R*T.
Another problem with the approach using a timeout on the client side is that it increases network traffic. Depending on implementation, O(R) messages per client will be passed when failover is needed.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.